package cn.itcast.web.controller.cargo;

import cn.itcast.domain.cargo.ContractProduct;
import cn.itcast.domain.cargo.ContractProductExample;
import cn.itcast.domain.cargo.Factory;
import cn.itcast.domain.cargo.FactoryExample;
import cn.itcast.service.cargo.ContractProductService;
import cn.itcast.service.cargo.FactoryService;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;


import java.io.IOException;
import java.util.List;

@Controller
@RequestMapping("/cargo/contractProduct")
public class ContractProductController extends BaseController {
    //1.注入货物
    @Reference
    private ContractProductService contractProductService;
    //2.注入厂家
    @Reference
    private FactoryService factoryService;


    /**
     * 1.  货物列表分页查询
     * 功能入口：购销合同列表点击“货物”
     * 请求地址：http://localhost:8080/cargo/contractProduct/list.do?contractId=1
     * 请求参数：contractId  购销合同id
     * 返回地址：/WEB/-INF/cargo/product/product-list.jsp
     *
     * 注意：需要根据购销合同id，查询货物列表
     * SELECT * FROM co_contract_product WHERE contract_id=''
     */
    //返回列表
    @RequestMapping("list")
    public String  list(@RequestParam(defaultValue = "1") Integer pageNum,
                        @RequestParam(defaultValue = "5")Integer pageSize,String contractId){
        //1. 根据购销合同id，查询货物列表
        //1.1构建查询条件
        ContractProductExample contractProductExample=new ContractProductExample();
        ContractProductExample.Criteria criteria = contractProductExample.createCriteria();
        criteria.andContractIdEqualTo(contractId);
        //1.2分页查询
        PageInfo<ContractProduct> pageInfo = contractProductService.findByPage(contractProductExample, pageNum, pageSize);
        //2. 查询货物的厂家;SELECT * FROM co_factory WHERE ctype='货物'
        //2.1构建查询条件
        FactoryExample factoryExample=new FactoryExample();
        factoryExample.createCriteria().andCtypeEqualTo("货物");
        //2.2下拉框查询
        List<Factory> factoryList = factoryService.findAll(factoryExample);

        //3.保存到域里面去
        request.setAttribute("pageInfo",pageInfo);
        request.setAttribute("factoryList",factoryList);
        //因为后面查询货物表的时候需要用到购销合同的id，所以保存进去
        // 保存购销合同id（为什么？因为货物表co_contract_product要存储购销合同id）
        request.setAttribute("contractId" ,contractId);
        return "cargo/product/product-list";
    }
    /**
     * 2.保存/修改
     * 功能入口：在货物列表里点击保存方法
     * 请求地址： /cargo/contractProduct/edit.do
     * 请求参数：contractProduct 货物对象
     * 返回地址：/WEB/-INF/cargo/product/product-list.jsp
     */
    //注入七牛云的工具类
   /* @Autowired
   private FileUploadUtil fileUploadUtil;
    @RequestMapping("/edit")
    public  String edit(MultipartFile productPhoto, ContractProduct contractProduct){

            //企业id，名称都从登陆用户哪里获取
            contractProduct.setCompanyId(getLoginCompanyId());
            contractProduct.setCompanyName(getLoginCompanyId());
            if (StringUtils.isEmpty(contractProduct.getId())){
                try {
                    //文件上传到七牛云
                    //获取图片的路径
                    String fullFileUrl = "http://"+fileUploadUtil.upload(productPhoto);
                    //设置文件路径
                    contractProduct.setProductImage(fullFileUrl);
                } catch (Exception e) {
                    e.printStackTrace();
                }


                contractProductService.save(contractProduct);
            }else {
                // 修改
                contractProductService.update(contractProduct);
            }


            return "redirect:/cargo/contractProduct/list?contractId="+contractProduct.getContractId();

    }*/


    //修改的回显页面
    /**
     *  请求地址：/cargo/contractProduct/toUpdate.do
     *  功能入口：/cargo/contractProduct/list
     *  请求参数：id
     *  相应地址：product-update
     */

    @RequestMapping("/toUpdate")
    public String toUpdate(String id){
        //1.根据货物表的id去查询返回货物对象
        ContractProduct contractProduct = contractProductService.findById(id);
          //2.下拉框返回的数据查询，1.构建查询条件
        FactoryExample factoryExample=new FactoryExample();
        factoryExample.createCriteria().andCtypeEqualTo("货物");
        List<Factory> list = factoryService.findAll(factoryExample);
        //3.存入数据
        request.setAttribute("factoryList",list);
        request.setAttribute("contractProduct",contractProduct);

        return "cargo/product/product-update";
    }


    /**
     * 删除
     * 请求路径： /cargo/contractProduct/delete.do
     * 响应数据：return "redirect:/cargo/contractProduct/list?contractId="+contractId;
     * 为什么加contractId;根据购销合同，根据购销合同作为参数进行跳转，因为删除后我需要跳转到货物列表，因为查询那个购销合同的货物
     * 请求参数：根据货物id去删除
     */

    @RequestMapping("/delete")
    public String delete(String id,String contractId){
        contractProductService.delete(id);
        return "redirect:/cargo/contractProduct/list?contractId="+contractId;
    }


    @RequestMapping("/toImport")
    public String toImport(String contractId){
        // 注意：保存购销合同id
        request.setAttribute("contractId",contractId);
        return "cargo/product/product-import";
    }

    /**
     * 请求路径：/cargo/contractProduct/import.do
     * 6. 上传货物, excel实现批量上传
     * 请求地址：http://localhost:8080/cargo/contractProduct/import.do
     * 请求参数：
     *      contractId      购销合同id
     *      file            选择的excel文件
     */

    @RequestMapping("import")
    public String importExcel(MultipartFile file, String contractId) throws IOException {
        //1.根据excel文件流，创建工作薄
        Workbook workbook = new XSSFWorkbook(file.getInputStream());

        //2.获取工作表
        Sheet sheet = workbook.getSheetAt(0);

        //3.获取总行数
        int rows = sheet.getPhysicalNumberOfRows();

        //4.遍历：从第二行开始遍历
        for (int i = 1; i < rows; i++) {
            //5.获取每一行
            Row row = sheet.getRow(i);
            //6.创建货物对象，封装对象
            ContractProduct cp = new ContractProduct();
            //注意设置购销合同id
            cp.setContractId(contractId);
            //设置行数据
            // 设置行数据
            cp.setFactoryName(row.getCell(1).getStringCellValue());
            cp.setProductNo(row.getCell(2).getStringCellValue());
            cp.setCnumber((int) row.getCell(3).getNumericCellValue());
            cp.setPackingUnit(row.getCell(4).getStringCellValue());
            cp.setLoadingRate(row.getCell(5).getNumericCellValue() + "");
            cp.setBoxNum((int) row.getCell(6).getNumericCellValue());
            cp.setPrice(row.getCell(7).getNumericCellValue());
            cp.setProductDesc(row.getCell(8).getStringCellValue());
            cp.setProductRequest(row.getCell(9).getStringCellValue());
            //设置厂家id
           Factory factory= factoryService.findByFactoryName(cp.getFactoryName());
           if (factory!=null){
               cp.setFactoryId(factory.getId());
           }
            //7. 添加货物
            contractProductService.save(cp);
        }


        // 上传成功后，重定向到购销合同列表
        return "redirect:/cargo/contract/list";
    }
}
